home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / CMPLTPAS / SOFTTEST.PAS < prev    next >
Pascal/Delphi Source File  |  1988-07-24  |  2KB  |  71 lines

  1. {--------------------------------------------------------------}
  2. {                           SoftIntTest                        }
  3. {                                                              }
  4. {       Software interrupt service routine demonstration       }
  5. {                                                              }
  6. {                             by Jeff Duntemann                }
  7. {                             Turbo Pascal V5.0                }
  8. {                             Last update 7/17/88              }
  9. {                                                              }
  10. {     From: COMPLETE TURBO PASCAL 5.0  by Jeff Duntemann       }
  11. {    Scott, Foresman & Co., Inc. 1988   ISBN 0-673-38355-5     }
  12. {--------------------------------------------------------------}
  13.  
  14. PROGRAM SoftIntTest;
  15.  
  16. USES DOS,CRT;
  17.  
  18.  
  19. VAR
  20.   Foo : Word;
  21.   Regs : Registers;
  22.   OldVector : Pointer;
  23.  
  24.  
  25.  
  26. PROCEDURE EnableInterrupts;
  27.  
  28. INLINE($FB);
  29.  
  30.  
  31.  
  32. PROCEDURE SoftISR(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);
  33. INTERRUPT;
  34.  
  35. BEGIN
  36.   EnableInterrupts;
  37.   FOO := AX;
  38.   BX := 17;
  39. END;
  40.  
  41.  
  42.  
  43. {$F+}
  44. PROCEDURE OurExitProc;
  45.  
  46. BEGIN
  47.   SetIntVec(76,OldVector); { Put 76 back to whatever it was before }
  48. END;
  49. {$F-}
  50.  
  51.  
  52.  
  53. BEGIN
  54.   ExitProc := @OurExitProc;  { Link exit proc into the chain }
  55.  
  56.   FOO := 0;
  57.   ClrScr;
  58.  
  59.   { We use 76 here because it's an unused vector }
  60.   GetIntVec(76,OldVector);   { Save old copy...just in case }
  61.   SetIntVec(76,@SoftISR);    { Give vector 76 SoftISR's address }
  62.  
  63.   Regs.AX := 42;      { Pass a value to SoftISR through AX }
  64.   Regs.BX := 0;       { Zero BX before making the call }
  65.   Intr(76,Regs);      { Trip interrupt 76 }
  66.  
  67.   Writeln('Foo=',Foo);     { Now examine FOO and BX }
  68.   Writeln('BX =',Regs.BX);
  69.   Readln;
  70. END.
  71.